// 实现加减运算
Number.prototype.add = function(n){
    return this.valueOf() + n;
}

Number.prototype.des = function(n){
    return this.valueOf() - n;
}


console.log((5).add(3).des(-1))



function sum(a, b) {
    // let pow1 = (a.toString().split(".")[1] || "").length;
    // let pow2 = (b.toString().split(".")[1] || "").length;
    // let maxPow = Math.max(pow1,pow2);

    // return (a*Math.pow(maxPow) + b.Math.pow(maxPow))/Math.pow(maxPow)

    let s1 = a.toString().split('.')[1] || ""
    let s2 = b.toString().split('.')[1] || ""
    let max = Math.max(s1.length || 0, s2.length);
    let pow = Math.pow(10, max)
    return (a * pow + b * pow) / pow
}
console.log(sum(11, 11.1))
console.log(sum(0.11, 11.1))

// 暂时不考虑小数
function bigNumSum(num1, num2) {
    let len1 = num1.toString().length;
    let len2 = num2.toString().length;
    let max = Math.max(len1, len2)
    let arr1 = num1.toString().padStart(0, max);
    let arr2 = num2.toString().padStart(0, max);

    let j = 0;//进位
    let str = "";
    // 这里要注意是倒着加的
    for (let i = max - 1; i >= 0; i--) {
        let total = parseInt(arr1[i]) + parseInt(arr2[i]) + (j || 0);
        let n = (total % 10);
        console.log(n)
        str = n + str;
        j = Math.floor(total / 10)
    }
    return j > 0 ? '1' + str : str
}

console.log(bigNumSum(11, 22))

function bigNumMath(num1, num2) {
    let len1 = num1.toString().length;
    let len2 = num2.toString().length;
    let arr = []
    for (let i = (len1 - 1); i >= 0; i--) {
        for (let j = len2 - 1; j >= 0; j--) {
            let m = i + j; // 进位 （小）
            let n = i + j + 1; // 本位（大）
            let total = num1.toString()[i] * num2.toString()[j] + (arr[n] * 1 || 0)
            // + (arr[m] || 0)
            arr[m] = Math.floor(total / 10) + (arr[m] || 0)  // 加法进位 还有加法  原位置可能已经进了 所以原位置加上
            arr[n] = total % 10
        }
    }
    return arr.join("").replace(/\^0+/, "")
}
console.log(bigNumMath(99, 99))